package edu.eam.vpujpa.entidades;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "VENDEDORES_VPU")
@NamedQueries({
	@NamedQuery(name=Vendedor.BUSCAR_VENDEDOR_BY_CODIGO, query="select v from Vendedor v where v.codigo =:"+Vendedor.PARAMETRO_CODIGO ),
	@NamedQuery(name=Vendedor.BUSCAR_SUBORDINADOS_BY_ID, query="select v from Vendedor v where v.vendedor.id =:"+Vendedor.PARAMETRO_CODIGO ),
})
public class Vendedor extends Persona implements Serializable {

	public final static String BUSCAR_VENDEDOR_BY_CODIGO="Vendedor.BuscarPorCodigo";
	public static final String PARAMETRO_CODIGO="parametro_codigo";
	public final static String BUSCAR_SUBORDINADOS_BY_ID="Vendedor.BuscarSubordinadosPorId";
	public static final String PARAMETRO_ID="parametro_id";
	/**
	 * Default serial version uid
	 */
	private static final long serialVersionUID = 1L;

	@Column(name = "PUNTUACION", nullable = false)
	private int puntuacion;

	@Column(name = "CODIGO", nullable = false, unique = true)
	private String codigo;

	@Column(name = "PASSWORD", nullable = false)
	private String password;
	
	@Column(name="INACTIVO",nullable=false)
	private boolean inactivo;

	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "ID_CATEGORIA_VENDEDOR")
	private CategoriaVendedor categoriaVendedor;

	@OneToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "ID_PERSONA")
	private Persona persona;

	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "ID_AUSPICIADOR")
	private Vendedor vendedor;

	public Vendedor() {
		super();
	}

	public Vendedor(int puntuacion, String codigo, String password,
			CategoriaVendedor categoriaVendedor,
			Vendedor vendedor,int cedula, String nombre, String apellidos, int movil,
			String email) {
		super(cedula, nombre, apellidos, movil, email);
		this.puntuacion = puntuacion;
		this.codigo = codigo;
		this.password = password;
		this.categoriaVendedor = categoriaVendedor;
		this.persona = persona;
		this.vendedor = vendedor;
	}

	/**
	 * Este metodo retorna el atributo puntuacion de la clase Vendedor
	 * 
	 * @return puntuacion El atributo puntuacion de la clase Vendedor que se
	 *         quiere obtener
	 * 
	 * @author Habib
	 */
	public int getPuntuacion() {
		return puntuacion;
	}
	

	public boolean isInactivo() {
		return inactivo;
	}

	public void setInactivo(boolean inactivo) {
		this.inactivo = inactivo;
	}

	/**
	 * Este metodo establece el atributo puntuacion de la clase Vendedor
	 * 
	 * @param puntuacion
	 *            El atributo puntuacion de la clase Vendedor que se quiere
	 *            establecer
	 * 
	 * @author Habib
	 */
	public void setPuntuacion(int puntuacion) {
		this.puntuacion = puntuacion;
	}

	/**
	 * Este metodo retorna el atributo codigo de la clase Vendedor
	 * 
	 * @return codigo El atributo codigo de la clase Vendedor que se quiere
	 *         obtener
	 * 
	 * @author Habib
	 */
	public String getCodigo() {
		return codigo;
	}

	/**
	 * Este metodo establece el atributo codigo de la clase Vendedor
	 * 
	 * @param codigo
	 *            El atributo codigo de la clase Vendedor que se quiere
	 *            establecer
	 * 
	 * @author Habib
	 */
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	/**
	 * Este metodo retorna el atributo password de la clase Vendedor
	 * 
	 * @return password El atributo password de la clase Vendedor que se quiere
	 *         obtener
	 * 
	 * @author Habib
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * Este metodo establece el atributo password de la clase Vendedor
	 * 
	 * @param password
	 *            El atributo password de la clase Vendedor que se quiere
	 *            establecer
	 * 
	 * @author Habib
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * Este metodo retorna el atributo categoriaVendedor de la clase Vendedor
	 * 
	 * @return categoriaVendedor El atributo categoriaVendedor de la clase
	 *         Vendedor que se quiere obtener
	 * 
	 * @author Habib
	 */
	public CategoriaVendedor getCategoriaVendedor() {
		return categoriaVendedor;
	}

	/**
	 * Este metodo establece el atributo categoriaVendedor de la clase Vendedor
	 * 
	 * @param categoriaVendedor
	 *            El atributo categoriaVendedor de la clase Vendedor que se
	 *            quiere establecer
	 * 
	 * @author Habib
	 */
	public void setCategoriaVendedor(CategoriaVendedor categoriaVendedor) {
		this.categoriaVendedor = categoriaVendedor;
	}

	/**
	 * Este metodo retorna el atributo persona de la clase Vendedor
	 * 
	 * @return persona El atributo persona de la clase Vendedor que se quiere
	 *         obtener
	 * 
	 * @author Habib
	 */
	public Persona getPersona() {
		return persona;
	}

	/**
	 * Este metodo establece el atributo persona de la clase Vendedor
	 * 
	 * @param persona
	 *            El atributo persona de la clase Vendedor que se quiere
	 *            establecer
	 * 
	 * @author Habib
	 */
	public void setPersona(Persona persona) {
		this.persona = persona;
	}

	/**
	 * Este metodo retorna el atributo vendedor de la clase Vendedor
	 * 
	 * @return vendedor El atributo vendedor de la clase Vendedor que se quiere
	 *         obtener
	 * 
	 * @author Habib
	 */
	public Vendedor getVendedor() {
		return vendedor;
	}

	/**
	 * Este metodo establece el atributo vendedor de la clase Vendedor
	 * 
	 * @param vendedor
	 *            El atributo vendedor de la clase Vendedor que se quiere
	 *            establecer
	 * 
	 * @author Habib
	 */
	public void setVendedor(Vendedor vendedor) {
		this.vendedor = vendedor;
	}
}
